/*
 * Copyright (c) 2021.版权所有高金磊
 */

package 领扣算法.AA中等题.有效的数独;

public class Main {
    int num = 0;
    boolean rows[][] = new boolean[9][9];
    boolean lists[][] = new boolean[9][9];
    boolean[][][] groups = new boolean[3][3][9];//groups[0][0]等于rows[0-2]+lists[0-2]但是保留list

    public boolean isValidSudoku(char[][] board) {
        for (int i = 0; i < 9; i++) {
            for (int j = 0; j < 9; j++) {
                num = board[i][j] - '1';
                if (num < 0 || num > 8)
                    continue;//不检查
                if (rows[i][num] || groups[i / 3][j / 3][num] || lists[j][num]) {
                    return false;
                }
                groups[i / 3][j / 3][num] = true;
                rows[i][num] = true;
                lists[j][num] = true;
            }

        }

        return true;
    }

//    int num=0;
//    public boolean isValidSudoku(char[][] board) {
//        for (int i = 0; i < 9; i++) {
//            for (int j = 0; j < 9; j++) {
//                num=board[i][j]-'1';
//                if (num<0||num>8)
//                    continue;//不检查
//                if (check_rows(i,num)&&check_lists(j,num )&&check_groups(i, j, num))
//                    continue;
//                return false;
//            }
//
//        }
//
//        return true;
//    }
//    boolean rows[][]=new boolean[9][9];
//    private boolean check_rows(int i,int num){
//
//        if (rows[i][num]){
//            return false;
//        }
//        rows[i][num]=true;
//        return true;
//    }
//    boolean lists[][]=new boolean[9][9];
//    private boolean check_lists(int j,int num){
//        if (lists[j][num]){
//            return false;
//        }
//        lists[j][num]=true;
//        return true;
//    }
//    boolean[][][] groups=new boolean[3][3][9];
//    private boolean check_groups(int i,int j,int num){
//        if (groups[i/3][j/3][num]){
//            return false;
//        }
//        groups[i/3][j/3][num]=true;
//        return true;
//    }
}
